#include <iostream>
using namespace std;

/*
    函数重载：C++允许程序员在同一个程序中定义多个名字相同，但是形参的类型个数有差别的函数
             c语言不可以这么干
    比如：我定义函数做加法运算，加法运算分为很多情况
            int + int
            int + double
            double + int
            double + double
    1.好处：同一类型功能的函数--》接口名字做了统一，不需要像c语言一样addladd2add3（通过不同的名字来区分)
    2.都叫add，如何区分？
    函数重载的底层原理：编译器会依据你传递的实参的类型和个数，从左到右匹配调用最合适的add

    3.函数重载的注意事项：
      第一个： (重点，初学者很容易犯错)函数重载不关心返回值类型，返回值类型不同，其它的都一样(函数名字，参数个数类型)，不叫函数重载  
      int add(int a, int b) 和 void add(int a, int b) 不叫函数重载
      第二个： 函数重载，函数名必须相同
      第三个： 函数重载，参数的个数或者类型至少要有一个是不同的
*/

int add(int a, int b)
{
    return a + b;
}

double add(double a, double b)
{
    return a + b;
}

double add(int a, double b)
{
    return a + b;
}

double add(double a, int b)
{
    return a + b;
}

int main()
{
    cout << add(1, 2) << endl;
    cout << add(1.1, 2.2) << endl;
    cout << add(1, 2.2) << endl;
    cout << add(1.1, 2) << endl;
}
